// Copyright 2007-2009 Comdiv (F. Sadykov) - http://code.google.com/u/fagim.sadykov/
// 
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// MODIFICATIONS HAVE BEEN MADE TO THIS FILE


using System.Web.Mvc;
using MvcContrib.Comdiv.Layers;
using MvcContrib.Comdiv.ViewEngines.Xslt;

namespace MvcContrib.ViewFactories{
    public class XsltViewFactory : VirtualPathProviderViewEngine{
        private static XsltViewEngine _defaultXsltViewEngine;
        public XsltViewFactory() : this(DefaultXsltViewEngine) {}

        public XsltViewFactory(XsltViewEngine engine){
            this.configureLayers("xslt");
            Engine = engine;
            Engine.Factory = this;
        }

        public static XsltViewEngine DefaultXsltViewEngine{
            get{
                if (null == _defaultXsltViewEngine){
                    _defaultXsltViewEngine = new XsltViewEngine();
                }
                return _defaultXsltViewEngine;
            }
        }

        protected XsltViewEngine Engine { get; private set; }

        protected override IView CreatePartialView(ControllerContext controllerContext, string partialPath){
            return CreateView(controllerContext, partialPath, null);
        }

        protected override IView CreateView(ControllerContext controllerContext, string viewPath, string masterPath){
            return Engine.GetView(controllerContext,
                                  controllerContext.HttpContext.Server.MapPath(viewPath),
                                  controllerContext.HttpContext.Server.MapPath(masterPath));
        }
    }
}